// 树状数组做法
// 动态维护一段前缀和
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 100010;
// 树状数组
int c[N];
// C[i]表示(i - lowbit(i),i]
int n, m;

inline int lowbit(int a) { return a & -a; }

void add(int a, int b)
{
    for(int i = a; i <= n; i += lowbit(i))
        c[i] += b;
}

int query(int a, int b)
{
    int ans = 0;
    for(int i = b; i > 0; i -= lowbit(i))
        ans += c[i];
    for(int i = a - 1; i > 0; i -= lowbit(i))
        ans -= c[i];
    return ans;
}

int main()
{
    cin >> n >> m;
    for(int i = 1; i <= n; ++i)
    {
        int tmp;
        cin >> tmp;
        add(i, tmp);
        // cout << c[i] << ' ';
    }
    // cout << endl;
    for(int i = 0; i < m; ++i)
    {
        int k, a, b;
        cin >> k >> a >> b;
        if(k) add(a, b);
        else cout << query(a, b) << endl;
    }
    return 0;
}